package com.domino.client;

import java.util.List;

import com.domino.shared.model.Brick;
import com.domino.shared.ActionResponse;
import com.domino.shared.JoinRequest;
import com.domino.shared.JoinResponse;
import com.domino.shared.LeaveGameReason;
import com.domino.shared.PlayerId;
import com.domino.shared.PutRequest;
import com.domino.shared.SessionStateRequest;
import com.domino.shared.SessionStateResponse;
import com.domino.shared.SessionStateResponseFinished;
import com.domino.shared.SessionStateResponseFirstRoundClientAction;
import com.domino.shared.SessionStateResponseFirstRoundWaitForServer;
import com.domino.shared.SessionStateResponseNewSession;
import com.domino.shared.SessionStateResponsePending;
import com.domino.shared.SessionStateResponsePlayerGaveUp;
import com.domino.shared.SessionStateResponseRoundClientAction;
import com.domino.shared.SessionStateResponseRoundWaitForServer;
import com.domino.shared.model.Point;
import com.domino.shared.model.SimpleBoard;
import com.domino.shared.session.NoSuchSessionException;
import com.domino.shared.session.SessionId;
import com.google.gwt.user.client.rpc.RemoteService;
import com.google.gwt.user.client.rpc.RemoteServiceRelativePath;

/**
 * The client side stub for the RPC service.
 */
@RemoteServiceRelativePath("domino")
public interface OthelloService extends RemoteService {
	JoinResponse joinGame(JoinRequest request) throws IllegalArgumentException;
	ActionResponse putBrick(PutRequest request) throws IllegalArgumentException, NoSuchSessionException;
	SessionStateResponse pollSession(SessionStateRequest request) throws IllegalArgumentException, NoSuchSessionException;
	List<Brick> getBricks(SessionId id) throws IllegalArgumentException, NoSuchSessionException;
	void leaveGame(SessionId id, PlayerId playerId, LeaveGameReason reason) throws IllegalArgumentException;
	void botGameFinished(SessionId id, PlayerId playerId,String bricks) throws IllegalArgumentException;
	void dummy(SessionStateResponseRoundWaitForServer a1,
			SessionStateResponseRoundClientAction a2,
			SessionStateResponsePending a3,
			SessionStateResponseNewSession a4,
			SessionStateResponseFirstRoundWaitForServer a5,
			SessionStateResponseFirstRoundClientAction a6,
			SessionStateResponseFinished a7,
			SessionStateResponsePlayerGaveUp a8,
			PlayerId id,
			SimpleBoard sb,
			java.util.LinkedList<Point> list,
			java.util.LinkedHashSet<Point> set,
			java.util.LinkedHashSet<Point> list2,
			java.util.LinkedList<Point> list3) throws IllegalArgumentException;

}
